diff options
author | Kornelius Kalnbach <murphy@rubychan.de> | 2011-09-09 02:05:44 +0200 |
---|---|---|
committer | Kornelius Kalnbach <murphy@rubychan.de> | 2011-09-09 02:05:44 +0200 |
commit | 7567e6e2f18334d3f0b5b3c6c9659a018be00e9e (patch) | |
tree | 18104f93126d0fd3b162ffdc2cadd1da104945ff /bench/example.plain | |
parent | 74b05c9f583669849fded8417a8f5003be3b3c6c (diff) | |
download | coderay-7567e6e2f18334d3f0b5b3c6c9659a018be00e9e.tar.gz |
remove obsolete big C example code, to make this a Ruby project on GitHub
Diffstat (limited to 'bench/example.plain')
-rw-r--r-- | bench/example.plain | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/bench/example.plain b/bench/example.plain deleted file mode 100644 index 9e9aefc..0000000 --- a/bench/example.plain +++ /dev/null @@ -1,201 +0,0 @@ -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include "codegen.h" -#include "symboltable.h" -#include "stringbuffer.h" - -extern void yyerror(char* msg); - -static stringBuffer* staticVariableBuffer; -static stringBuffer* classInitBuffer; -static stringBuffer* currentMethodBuffer; -static stringBuffer* finishedMethodsBuffer; -static stringBuffer* mainBuffer; - -static int currentMethodBufferIndex; -static int currentMethodStackSize; -static int currentMethodStackSizeMax; -static int currentMethodNumberOfLocals; - -static int classInitBufferIndex; -static int classInitStackSize; -static int classInitStackSizeMax; - -static int labelCounter = 0; -static int global = 1; - -char tempString[MAX_LENGTH_OF_COMMAND]; - -extern char* className; /* from minako-syntax.y */ - -/* forward declarations */ -static void increaseStackby(int stackdiff); -char convertType(int type); - -void codegenInit() { - staticVariableBuffer = newStringBuffer(); - classInitBuffer = newStringBuffer(); - currentMethodBuffer = 0; - finishedMethodsBuffer = newStringBuffer(); - mainBuffer = newStringBuffer(); - - stringBufferAppend(mainBuffer, "; ------- Header --------------------------------------------"); - sprintf(tempString, ".class public synchronized %s", className); - stringBufferAppend(mainBuffer, tempString); - stringBufferAppend(mainBuffer, ".super java/lang/Object"); - stringBufferAppend(mainBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(mainBuffer, ""); - - stringBufferAppend(finishedMethodsBuffer, "; ------- Constructor ---------------------------------------"); - stringBufferAppend(finishedMethodsBuffer, ".method public <init>()V"); - stringBufferAppend(finishedMethodsBuffer, "\t.limit stack 1"); - stringBufferAppend(finishedMethodsBuffer, "\t.limit locals 1"); - stringBufferAppend(finishedMethodsBuffer, "\taload_0"); - stringBufferAppend(finishedMethodsBuffer, "\tinvokenonvirtual java/lang/Object/<init>()V"); - stringBufferAppend(finishedMethodsBuffer, "\treturn"); - stringBufferAppend(finishedMethodsBuffer, ".end method"); - stringBufferAppend(finishedMethodsBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(finishedMethodsBuffer, ""); - - stringBufferAppend(staticVariableBuffer, "; ------- Class Variables -----------------------------------"); - - stringBufferAppend(classInitBuffer, "; ------- Class Initializer ---------------------------------"); - stringBufferAppend(classInitBuffer, ".method static <clinit>()V"); - classInitBufferIndex = classInitBuffer->numberOfNextElement; - stringBufferAppend(classInitBuffer, "\t.limit locals 0"); - -} - -void codegenAppendCommand(char* cmd, int stackdiff) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "\t%s", cmd); - if (global) stringBufferAppend(classInitBuffer, tempString); - else stringBufferAppend(currentMethodBuffer, tempString); - increaseStackby(stackdiff); -} - -void codegenInsertCommand(int address, char* cmd, int stackdiff) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "\t%s", cmd); - if (global) stringBufferInsert(classInitBuffer, address, tempString); - else stringBufferInsert(currentMethodBuffer, address, tempString); - increaseStackby(stackdiff); -} - -void codegenAppendLabel(int label) { - char tempString[MAX_LENGTH_OF_COMMAND]; - sprintf(tempString, "Label%d:", label); - if (global) stringBufferAppend(classInitBuffer, tempString); - else stringBufferAppend(currentMethodBuffer, tempString); -} - -void codegenAddVariable(char* name, int type) { - /*fprintf(stderr, "add variable %s(%d) global=%d ", name, convertType(type), global);*/ - if (global) { - if (type == TYPE_INT) sprintf(tempString, ".field static %s %c", name, 'I'); - else if (type == TYPE_FLOAT) sprintf(tempString, ".field static %s %c", name, 'F'); - else if (type == TYPE_BOOLEAN) sprintf(tempString, ".field static %s %c", name, 'Z'); - else yyerror("compiler-intern error in codegenAddGlobalVariable().\n"); - stringBufferAppend(staticVariableBuffer, tempString); - } - else { - currentMethodNumberOfLocals++; - } -} - -int codegenGetNextLabel() { - return labelCounter++; -} - -int codegenGetCurrentAddress() { - if (global) return classInitBuffer->numberOfNextElement; - else return currentMethodBuffer->numberOfNextElement; -} - -void codegenEnterFunction(symtabEntry* entry) { - currentMethodBuffer = newStringBuffer(); - currentMethodStackSize = 0; - currentMethodStackSizeMax = 0; - labelCounter = 1; - global = 0; - - if (strcmp(entry->name, "main") == 0) { - if (entry->idtype != TYPE_VOID) yyerror("main has to be void.\n"); - currentMethodNumberOfLocals = 1; - symtabInsert(strdup("#main-param#"), TYPE_VOID, CLASS_FUNC); - stringBufferAppend(currentMethodBuffer, "; ------- Methode ---- void main() --------------------------"); - stringBufferAppend(currentMethodBuffer, ".method public static main([Ljava/lang/String;)V"); - } - else { - int i; - currentMethodNumberOfLocals = entry->paramIndex; - stringBufferAppend(currentMethodBuffer, "; ------- Methode -------------------------------------------"); - sprintf(tempString, ".method public static %s(", entry->name); - for (i=entry->paramIndex-1; i>=0; i--) { - int type = entry->params[i]->idtype; - tempString[strlen(tempString)+1] = 0; - tempString[strlen(tempString)] = convertType(type); - } - tempString[strlen(tempString)+2] = 0; - tempString[strlen(tempString)+1] = convertType(entry->idtype); - tempString[strlen(tempString)] = ')'; - stringBufferAppend(currentMethodBuffer, tempString); - } - currentMethodBufferIndex = currentMethodBuffer->numberOfNextElement; -} - -void codegenLeaveFunction() { - global = 1; - sprintf(tempString, "\t.limit locals %d", currentMethodNumberOfLocals); - stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString); - sprintf(tempString, "\t.limit stack %d", currentMethodStackSizeMax); - stringBufferInsert(currentMethodBuffer, currentMethodBufferIndex, tempString); - stringBufferAppend(currentMethodBuffer, "\treturn"); - stringBufferAppend(currentMethodBuffer, ".end method"); - stringBufferAppend(currentMethodBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(currentMethodBuffer, ""); - - stringBufferConcatenate(finishedMethodsBuffer, currentMethodBuffer); -} - - - -void codegenFinishCode() { - stringBufferAppend(staticVariableBuffer, "; -----------------------------------------------------------"); - stringBufferAppend(staticVariableBuffer, ""); - - sprintf(tempString, "\t.limit stack %d", classInitStackSizeMax); - stringBufferInsert(classInitBuffer, classInitBufferIndex, tempString); - stringBufferAppend(classInitBuffer, "\treturn"); - stringBufferAppend(classInitBuffer, ".end method"); - stringBufferAppend(classInitBuffer, "; -----------------------------------------------------------"); - - stringBufferConcatenate(mainBuffer, staticVariableBuffer); - stringBufferConcatenate(mainBuffer, finishedMethodsBuffer); - stringBufferConcatenate(mainBuffer, classInitBuffer); - - stringBufferPrint(mainBuffer); -} - -static void increaseStackby(int stackdiff) { - if (global) { - classInitStackSize += stackdiff; - if (classInitStackSize > classInitStackSizeMax) classInitStackSizeMax = classInitStackSize; - } - else { - currentMethodStackSize += stackdiff; - if (currentMethodStackSize > currentMethodStackSizeMax) currentMethodStackSizeMax = currentMethodStackSize; - } -} - -char convertType(int type) { - switch(type) { - case TYPE_VOID: return 'V'; - case TYPE_INT: return 'I'; - case TYPE_FLOAT: return 'F'; - case TYPE_BOOLEAN: return 'Z'; - default: yyerror("compiler-intern error in convertType().\n"); - } - return 0; /* to avoid compiler-warning */ -} |