static void PrintGasConstantDecl(FILE *f, AST *ast, int inlineAsm) { startLine(f, inlineAsm); fprintf(f, "\t\t.equ\t%s, ", ast->d.string); PrintInteger(f, EvalConstExpr(ast)); endLine(f, inlineAsm); }
/* * print constant declarations */ static void PrintConstant(FILE *f, AST *ast) { if (IsFloatConst(ast)) { PrintFloat(f, EvalConstExpr(ast)); return; } PrintExpr(f, ast); }
static void PrintCppHeaderFile(FILE *f, ParserState *parse) { AST *ast; int flags = PRIVATE; /* things we always need */ if (gl_header) { fprintf(f, "%s", gl_header); } fprintf(f, "#ifndef %s_Class_Defined__\n", parse->classname); fprintf(f, "#define %s_Class_Defined__\n\n", parse->classname); fprintf(f, "#include <stdint.h>\n"); /* include any needed object headers */ PrintSubHeaders(f, parse); /* print the constant declarations */ fprintf(f, "class %s {\npublic:\n", parse->classname); PrintAllConstants(f, parse); /* object references */ for (ast = parse->objblock; ast; ast = ast->right) { ParserState *P = ast->d.ptr; AST *objdef = ast->left; if (objdef->kind == AST_IDENTIFIER) { fprintf(f, " %s\t%s;\n", P->classname, objdef->d.string); } else if (objdef->kind == AST_ARRAYDECL) { AST *arrname = objdef->left; AST *arrsize = objdef->right; if (arrname->kind == AST_IDENTIFIER) { fprintf(f, " %s\t%s[%d];\n", P->classname, arrname->d.string, EvalConstExpr(arrsize) ); } else { ERROR(objdef, "internal error in object printing"); } } } /* data block, if applicable */ if (parse->datblock && !gl_gas_dat) { fprintf(f, " static "); PrintDatArray(f, parse, ";\n", false); } /* now the public members */ PrintPublicFunctionDecls(f, parse); /* now the private members */ /* Note that Spin sorts these, outputing first the 32 bit vars, then 16, finally 8 */ if (parse->volatileVariables) flags |= VOLATILE; fprintf(f, "private:\n"); PrintAllVarListsOfType(f, parse, ast_type_long, flags); PrintAllVarListsOfType(f, parse, ast_type_word, flags); PrintAllVarListsOfType(f, parse, ast_type_byte, flags); /* now the private methods */ PrintPrivateFunctionDecls(f, parse); fprintf(f, "};\n\n"); fprintf(f, "#endif\n"); }
static void PrintCHeaderFile(FILE *f, ParserState *parse) { int n; AST *ast; int flags = PRIVATE; /* things we always need */ if (gl_header) { fprintf(f, "%s", gl_header); } fprintf(f, "#ifndef %s_Class_Defined__\n", parse->classname); fprintf(f, "#define %s_Class_Defined__\n\n", parse->classname); fprintf(f, "#include <stdint.h>\n"); PrintSubHeaders(f, parse); PrintAllConstants(f, parse); if (parse->volatileVariables) flags |= VOLATILE; /* print the structure definition */ fprintf(f, "\ntypedef struct %s {\n", parse->classname); n = PrintAllVarListsOfType(f, parse, ast_type_long, flags); n += PrintAllVarListsOfType(f, parse, ast_type_word, flags); n += PrintAllVarListsOfType(f, parse, ast_type_byte, flags); /* object references */ for (ast = parse->objblock; ast; ast = ast->right) { ParserState *P = ast->d.ptr; AST *objdef = ast->left; if (objdef->kind == AST_IDENTIFIER) { fprintf(f, " %s\t%s;\n", P->classname, objdef->d.string); n++; } else if (objdef->kind == AST_ARRAYDECL) { AST *arrname = objdef->left; AST *arrsize = objdef->right; if (arrname->kind == AST_IDENTIFIER) { fprintf(f, " %s\t%s[%d];\n", P->classname, arrname->d.string, EvalConstExpr(arrsize) ); n++; } else { ERROR(objdef, "internal error in object printing"); } } } /* needed to avoid problems with empty structures on Catalina */ if (n == 0) fprintf(f, " char dummy__;\n"); fprintf(f, "} %s;\n\n", parse->classname); /* now the public members */ PrintPublicFunctionDecls(f, parse); /* now the private methods */ /* PrintPrivateFunctionDecls(f, parse); */ fprintf(f, "#endif\n"); }