Skip to content

Commit 6d8ef38

Browse files
committed
fix: Make code compile
Make code compile
1 parent dcb1038 commit 6d8ef38

File tree

9 files changed

+40
-37
lines changed

9 files changed

+40
-37
lines changed

lib/Cargo.toml

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
[package]
2-
name = "lib"
3-
version = "0.1.0"
4-
edition = "2021"
5-
6-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7-
8-
[dependencies]
9-
tracing = "0.1.37"
10-
serde = { version = "1.0", features = ["derive"] }
11-
serde_json = "1.0"
1+
[package]
2+
name = "lib"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
tracing = "0.1.37"
10+
serde = { version = "1.0", features = ["derive"] }
11+
serde_json = "1.0"
12+
pest = "2.5.7"
13+
pest_derive = "2.6.0"

lib/src/codegen/ir.rs

+2
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ pub struct NameAndType {
203203
/// The instructions for the JVM
204204
/// https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.areturn
205205
pub(crate) enum Instruction {
206+
aload_0,
206207
aload(u8), //Load reference from local variable
207208
iload(u8), //Load int from local variable
208209
ifeq(u16), //Branch if int is 0
@@ -427,6 +428,7 @@ mod tests {
427428
let field = FieldDecl {
428429
field_type: Type::Int,
429430
name: String::from("test"),
431+
val: None,
430432
};
431433
let ir_field = generate_field(&field, &mut constant_pool);
432434
assert_eq!(ir_field.name_index, 1);

lib/src/parser/ExampleGrammar.pest

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ID = {ASCII_ALPHA_UPPER~ASCII_ALPHA+}
2+
Name = {ID~","~ID}
3+
List = {(Name~"\n")+}

src/JavaGrammar.pest lib/src/parser/JavaGrammar.pest

-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
//! Grammar~doc
2-
ID = {ASCII_ALPHA_UPPER~ASCII_ALPHA+}
3-
Name = {ID~","~ID}
4-
List = {(Name~"\n")+}
5-
6-
71
IDENTIFIER ={(ASCII_ALPHA|"_")~(ASCII_ALPHANUMERIC|"_")* }
82

93
compilationunit = {classdeclaration+ }

lib/src/parser/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
mod parser;
22
#[cfg(test)]
33
mod test;
4+
5+
pub use parser::*;
+14-15
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
extern crate pest;
22
extern crate pest_derive;
33

4+
use super::*;
45
use pest::error::Error;
6+
use pest::iterators::Pair;
57
use pest::Parser;
68
use pest_derive::Parser;
79
use serde::{Deserialize, Serialize};
8-
use pest::iterators::Pair;
9-
1010

1111
#[derive(Parser)]
12-
#[grammar = "JavaGrammar.pest"]
12+
#[grammar = "src/parser/ExampleGrammar.pest"]
1313
struct ExampleParser;
1414

1515
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -22,21 +22,20 @@ pub enum Example {
2222
pub fn parse_Example(file: &str) -> Result<Example, Error<Rule>> {
2323
let example: Pair<Rule> = ExampleParser::parse(Rule::List, file)?.next().unwrap();
2424

25+
Ok(parse_value(example))
26+
}
2527

26-
fn parse_value(pair: Pair<Rule>) -> Example {
27-
match pair.as_rule() {
28-
Rule::ID => Example::ID(String::from(pair.as_str())),
29-
Rule::Name => Name(pair: Pair<Rule>),
30-
Rule::List => Example::List(pair.into_inner().map(parse_value).collect()),
31-
}
28+
fn parse_value(pair: Pair<Rule>) -> Example {
29+
match pair.as_rule() {
30+
Rule::ID => Example::ID(String::from(pair.as_str())),
31+
Rule::Name => Name(pair),
32+
Rule::List => Example::List(pair.into_inner().map(parse_value).collect()),
3233
}
33-
34-
Ok(parse_value(example))
3534
}
36-
pub fn Name(pair: Pair<Rule>)->Example::Name
37-
{
35+
36+
pub fn Name(pair: Pair<Rule>) -> Example {
3837
let mut pairs = pair.into_inner();
3938
let a = parse_value(pairs.next().unwrap());
4039
let b = parse_value(pairs.next().unwrap());
41-
return Example::Name(Box::new(a), Box::new(b))
42-
}
40+
return Example::Name(Box::new(a), Box::new(b));
41+
}

lib/src/parser/test.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
use super::*;
2+
13
#[test]
2-
fn testtest() -> bool {
4+
fn testtest() {
35
let test: Example = parse_Example(
46
"Val,Richter\nBene,Brandmeier\nMario,Hinkel\nMaxi,Floto\nPflipper,Wolf\nTori,Gonnheimer\nSander,Stella\n",
57
)
68
.expect("u suck");
9+
// TODO: Use asserts or something, not println
710
println!("{}", serde_json::to_string(&test).unwrap());
8-
true
911
}

lib/src/tests/to_java.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,10 @@ pub fn expr_to_java(expr: &Expr) -> String {
148148
Expr::Integer(i) => i.to_string(),
149149
Expr::Jnull => "null".to_string(),
150150
Expr::LocalOrFieldVar(var) => var.to_owned(),
151+
Expr::LocalVar(var) => var.to_owned(),
152+
Expr::FieldVar(var) => var.to_owned(),
151153
Expr::StmtExprExpr(stmt_expr) => stmt_expr_to_java(stmt_expr),
152154
Expr::String(s) => format!("\"{}\"", s),
153-
Expr::Super => "super".to_string(),
154155
Expr::This => "this".to_string(),
155156
Expr::TypedExpr(expr, typ) => expr_to_java(expr),
156157
Expr::Unary(op, expr) => format!("{}({})", op, expr_to_java(expr)),

src/main.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use parser::Example;
2-
use parser::*;
31
use lib::typechecker::typechecker;
42
use lib::types::{Class, Expr, FieldDecl, MethodDecl, Prg, Stmt, StmtExpr, Type};
53
use serde_json::Value;

0 commit comments

Comments
 (0)