return $ CYVar($B1($B($I(module_->part_->Word()), $C1($V("require"), module_->Replace(context, "/")))));
}
+CYStatement *CYImportDeclaration::Replace(CYContext &context) {
+ CYIdentifier *module(context.Unique());
+
+ CYList<CYStatement> statements;
+ CYForEach (specifier, specifiers_)
+ statements->*specifier->Replace(context, module);
+
+ return $ CYBlock($$
+ ->* $ CYLexical(false, $B1($B(module, $C1($V("require"), module_))))
+ ->* statements);
+}
+
+CYStatement *CYImportSpecifier::Replace(CYContext &context, CYIdentifier *module) {
+ binding_ = binding_->Replace(context, CYIdentifierLexical);
+
+ CYExpression *import($V(module));
+ if (name_ != NULL)
+ import = $M(import, $S(name_));
+ return $E($ CYAssign($V(binding_), import));
+}
+
CYTarget *CYIndirect::Replace(CYContext &context) {
return $M(rhs_, $S("$cyi"));
}
}
CYStatement *CYTypeDefinition::Replace(CYContext &context) {
- return $E($ CYAssign($V(typed_->identifier_), typed_->Replace(context)));
+ CYIdentifier *identifier(typed_->identifier_);
+ typed_->identifier_ = NULL;
+ return $ CYLexical(false, $B1($B(identifier, $ CYTypeExpression(typed_))));
}
CYTarget *CYTypeError::Replace(CYContext &context) {
return NULL;
}
+CYTarget *CYTypeExpression::Replace(CYContext &context) {
+ return typed_->Replace(context);
+}
+
CYTarget *CYTypeModifier::Replace(CYContext &context, CYTarget *type) { $T(type)
return Replace_(context, type);
}
return $ CYCall($ CYDirectMember(specifier_->Replace(context), $ CYString("signed")));
}
+CYTarget *CYTypeStruct::Replace(CYContext &context) {
+ CYList<CYElementValue> types;
+ CYList<CYElementValue> names;
+
+ CYForEach (field, fields_) {
+ CYTypedIdentifier *typed(field->typed_);
+ types->*$ CYElementValue(typed->Replace(context));
+
+ CYExpression *name;
+ if (typed->identifier_ == NULL)
+ name = NULL;
+ else
+ name = $S(typed->identifier_->Word());
+ names->*$ CYElementValue(name);
+ }
+
+ CYTarget *target($N2($V("Type"), $ CYArray(types), $ CYArray(names)));
+ if (name_ != NULL)
+ target = $C1($M(target, $S("withName")), $S(name_->Word()));
+ return target;
+}
+
CYTarget *CYTypeUnsigned::Replace(CYContext &context) {
return $ CYCall($ CYDirectMember(specifier_->Replace(context), $ CYString("unsigned")));
}