Modify the language's store-ptr syntax to make it match the compiler

store-ptr now takes a symbol instead of a list containing a symbol to
make the compiler easier to write.
pull/3/head
itycodes 2 weeks ago
parent d8d4f0ee89
commit 828d0aa567

@ -12,7 +12,7 @@ fn test_emit() {
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main) :<>
(store-ptr (out-color)
(store-ptr out-color
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))
1.0
@ -49,3 +49,58 @@ fn test_type_parse() {
assert_eq!(parse_type(&"f32".to_string()), Float(32));
assert_eq!(parse_type(&"s32".to_string()), Int(32));
}
#[test]
fn test_block_ssa() {
use crate::compiler::backend::*;
use crate::compiler::*;
use crate::parser::*;
let src = "
(module Shader Logical GLSL450)
(import :std GLSL.std.450)
(bind (out-color:*f32) (Location 0))
(dec out-color:*f32 Output)
(entry main Fragment OriginUpperLeft (:out-color))
(fun (main) :<>
(store-ptr out-color 1.0))
";
let ast = parse(tokenize(src));
let mut module = meta_compile(ast.unwrap()).unwrap();
let fun = module.functions.pop().unwrap();
let block = fun.ast.unwrap();
let block = block
.list()
.unwrap()
.get(0)
.unwrap()
.clone();
println!("{:#?}", block);
let mut vars = vec![];
let mut constants = vec![];
let mut counter = Box::new(0);
let mut stack = vec![];
let mut out = vec![];
for v in &module.globals {
vars.push((v.name.clone(), v.typ.clone()));
}
compile_ast_ssa(
block,
&mut vars,
&mut constants,
&mut counter,
&mut stack,
&mut out,
);
println!("\n---constants:---\n{:#?}\n------", constants);
println!("\n---vars:---\n{:#?}\n------", vars);
println!("\n---stack:---\n{:#?}\n------", stack);
println!("\n---counter---\n{}\n------", counter);
println!("\n---out---");
for (a, b) in &out {
match a {
Some(a) => println!("%{} = {}", a, b),
None => println!("{}", b),
}
}
println!("------");
}

@ -44,7 +44,7 @@ fn test_parse() {
(dec out-color:*v4f32o Output)
(entry main Fragment OriginUpperLeft (:frag-coord :out-color))
(fun (main) :<>
(store-ptr (out-color)
(store-ptr out-color
(v4f32i (/ (.xy (load-ptr frag-coord))
(v2f32 1920.0 1080.0))
1.0
@ -111,9 +111,7 @@ fn test_parse() {
Ast::Symbol(Localised::dummy_location(":<>".to_string())),
Ast::List(Localised::dummy_location(vec![
Ast::Symbol(Localised::dummy_location("store-ptr".to_string())),
Ast::List(Localised::dummy_location(vec![Ast::Symbol(
Localised::dummy_location("out-color".to_string()),
)])),
Ast::Symbol(Localised::dummy_location("out-color".to_string())),
Ast::List(Localised::dummy_location(vec![
Ast::Symbol(Localised::dummy_location("v4f32i".to_string())),
Ast::List(Localised::dummy_location(vec![

Loading…
Cancel
Save