# dmd.importc

Contains semantic routines specific to ImportC

Specification: C11

#### Authors

Walter Bright

#### License

Boost License 1.0

Source: importc.d

Documentation: https://dlang.org/phobos/dmd_importc.html

Coverage: https://codecov.io/gh/dlang/dmd/src/master/src/dmd/importc.d

- `cAdjustParamType`

  #### 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

- `arrayFuncConv`

  #### 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

- `fieldLookup`

  #### Declaration

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

  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
  `bool `arrow`` | -> was used

  #### Return Value

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

- `carraySemantic`

  #### 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

- `addDefaultCInitializer`

  #### Declaration

  `void `addDefaultCInitializer`(VarDeclaration `dsym`);`

  Determine default initializer for const global symbol.

- `castCallAmbiguity`

  #### 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

- `cFuncEquivalence`

  #### 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

- `cTypeEquivalence`

  #### 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