dmd.importc

Contains semantic routines specific to ImportC

Specification: C11

Authors

Walter Bright

Source: importc.d

  • Declaration

    Type cAdjustParamType(Type t, Scope* sc);

    C11 does not allow array or function parameters. Hence, adjust those types per C11 6.7.6.3 rules.

    Parameters

    Type t

    parameter type to adjust

    Scope* sc

    context

    Return Value

    adjusted type

  • Declaration

    Expression arrayFuncConv(Expression e, Scope* sc);

    C11 6.3.2.1-3 Convert expression that is an array of type to a pointer to type. C11 6.3.2.1-4 Convert expression that is a function to a pointer to a function.

    Parameters

    Expression e

    ImportC expression to possibly convert

    Scope* sc

    context

    Return Value

    converted expression

  • Declaration

    Expression fieldLookup(Expression e, Scope* sc, Identifier id);

    Run semantic on e. Expression e evaluates to an instance of a struct. Look up ident as a field of that struct.

    Parameters

    Expression e

    evaluates to an instance of a struct

    Scope* sc

    context

    Identifier id

    identifier of a field in that struct

    Return Value

    if successful e.ident if not then ErrorExp and message is printed

  • Declaration

    Expression carraySemantic(ArrayExp ae, Scope* sc);

    C11 6.5.2.1-2 Apply C semantics to E[I] expression. E1[E2] is lowered to *(E1 + E2)

    Parameters

    ArrayExp ae

    ArrayExp to run semantics on

    Scope* sc

    context

    Return Value

    Expression if this was a C expression with completed semantic, null if not

  • Declaration

    void addDefaultCInitializer(VarDeclaration dsym);

    Determine default initializer for const global symbol.

  • Declaration

    Expression castCallAmbiguity(Expression e, Scope* sc);

    Resolve cast/call grammar ambiguity.

    Parameters

    Expression e

    expression that might be a cast, might be a call

    Scope* sc

    context

    Return Value

    null means leave as is, !=null means rewritten AST

  • Declaration

    bool cFuncEquivalence(TypeFunction tf1, TypeFunction tf2);

    Implement the C11 notion of function equivalence, which allows prototyped functions to match K+R functions, even though they are different.

    Parameters

    TypeFunction tf1

    type of first function

    TypeFunction tf2

    type of second function

    Return Value

    true if C11 considers them equivalent

  • Declaration

    bool cTypeEquivalence(Type t1, Type t2);

    Types haven't been merged yet, because we haven't done semantic() yet. But we still need to see if t1 and t2 are the same type.

    Parameters

    Type t1

    first type

    Type t2

    second type

    Return Value

    true if they are equivalent types