Skip to content

Commit

Permalink
Merge branch 'master' of github.com:vsmenon/start into vsmenon-master
Browse files Browse the repository at this point in the history
Conflicts:
	.gitignore
  • Loading branch information
nelsonje committed Jun 4, 2013
2 parents 1f51f5f + 83fb9d7 commit e07afef
Show file tree
Hide file tree
Showing 18 changed files with 2,039 additions and 25 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
examples/*.dot
examples/*.txt
examples/*.pdf
packages
pubspec.lock
75 changes: 75 additions & 0 deletions bin/renum.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
library renum;

import 'dart:io';

void _check(bool flag, String message) {
if (!flag) {
print(message);
throw new Exception(message);
}
}

Map _parse(String bytecode) {
final instMap = new Map<num, int>();
int count = 0;
// Read in the program from stdin
for (final line in bytecode.split('\n')) {
var words = line.trim().split(" ");
if (line.trim() == "") {
// print('$line\n');
continue;
}
if (words[0] != "instr") {
// print('$line\n');
continue;
}
count += 1;
num pc = double.parse(words[1].replaceFirst(':', ''));
instMap[pc] = count;
}
return instMap;
}

void _renum(String bytecode, Map<num, int> instMap) {
int count = 0;
// Read in the program from stdin
for (final line in bytecode.split('\n')) {
var words = line.trim().split(" ");
if (line.trim() == "") {
print(line);
continue;
}
if (words[0] != "instr") {
print(line);
continue;
}
count += 1;
String newInst = ' instr $count:';
// _check(index == (instructions.length + 1), "Invalid index $index");
for (int i = 2; i < words.length; ++i) {
var word = words[i];
if (word[0] == '(') {
final pc = double.parse(word.substring(1, word.length - 1));
word = '(${instMap[pc]})';
} else if (word[0] == '[') {
final pc = double.parse(word.substring(1, word.length - 1));
word = '[${instMap[pc]}]';
}
newInst += ' $word';
}
print(newInst);
}
}

void main()
{
final args = (new Options()).arguments;

final filename = args[0];

final file = new File(filename);
final input = file.readAsStringSync();

final map = _parse(input);
_renum(input, map);
}
4 changes: 2 additions & 2 deletions bin/start.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ library start;
import 'dart:io';
import 'package:args/args.dart';

import 'startc/startc.dart';
import 'starti/starti.dart';
import 'package:start/startc.dart';
import 'package:start/starti.dart';

final parser = new ArgParser();

Expand Down
5 changes: 3 additions & 2 deletions bin/test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ final TESTS = [
'link.dart',
'mmm.dart',
'prime.dart',
'rational.dart',
'regslarge.dart',
'sieve.dart',
'sort.dart',
Expand All @@ -33,8 +34,8 @@ void main() {
final options = new Options();
final vm = options.executable;
final script = options.script;
Future<String> dir = new File(script).directory().then((d) => d.path);
dir.then((path) => runTests(vm, '$path/..'));
String path = new File(script).directory.path;
runTests(vm, '$path/..');
}

void runTests(String vm, String path) {
Expand Down
6 changes: 6 additions & 0 deletions examples/class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ void main()

WriteLong(b2.a.y + b.y + b2.a.x - 23);
WriteLine();
if (42 is int) {
WriteLong(b.y);
WriteLine();
}
WriteLong(7);
WriteLine();
}

/*
Expand Down
42 changes: 42 additions & 0 deletions examples/cproptest.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import 'stdio.dart';

int data0;
int data1;
int data2;

void cproptest1() {
int j;
j = 1 + 2 * 4;
data0 = j;
}

void cproptest9() {
int i;
int stop;
int j;

stop = data0;
j = 21;
i = 1;
while (i < stop) {
j = (j - 20) * 21;
i = i + 1;
}
data1 = j;
data2 = i;
}

void main() {
data0 = 0;

cproptest1();
WriteLong(data0);
WriteLine();

data1 = 0;
data2 = 0;
cproptest9();
WriteLong(data1);
WriteLong(data2);
WriteLine();
}
91 changes: 91 additions & 0 deletions examples/rational.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
//test array and struct
import 'stdio.dart';

class Rational {
int numerator;
int denominator;
}

// Return value for functions.
var retVal;

void gcd(int a, int b)
{
int c;

while (b != 0) {
c = a;
a = b;
b = c % b;
}
retVal = a;
}

void makeRational(int n, int d) {
int common;

gcd(n, d);
common = retVal;
retVal = new Rational();
retVal.numerator = n ~/ common;
retVal.denominator = d ~/ common;
}

void add(var a, var b) {
if (a is int) {
if (b is int) {
retVal = a + b;
} else {
makeRational(a * b.denominator + b.numerator, b.denominator);
}
} else {
// a is Rational
if (b is int) {
makeRational(b * a.denominator + a.numerator, a.denominator);
} else {
makeRational(a.numerator * b.denominator + b.numerator * a.denominator, a.denominator * b.denominator);
}
}
}

void write(var a) {
if (a is Rational) {
WriteLong(a.numerator);
WriteLong(a.denominator);
WriteLine();
} else {
// a is int
WriteLong(a);
WriteLine();
}
}

void main() {
int a, b;
Rational x, y;

a = 2;
b = 5;

makeRational(1, 2);
x = retVal;
makeRational(2, 3);
y = retVal;

write(a);
write(x);
add(a, x);
write(retVal);
add(y, y);
write(retVal);
add(a, b);
write(retVal);
}

/*
2
1 2
5 2
4 3
7
*/
Loading

0 comments on commit e07afef

Please sign in to comment.