Skip to content

Commit 46f6fe9

Browse files
committed
Added null keyword for creating null pointer values
1 parent fa98d32 commit 46f6fe9

File tree

8 files changed

+30
-4
lines changed

8 files changed

+30
-4
lines changed

Diff for: src/asg/expr/kind.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub enum ExprKind {
1919
FloatingLiteral(FloatSize, Option<NotNan<f64>>),
2020
String(String),
2121
NullTerminatedString(CString),
22+
Null,
2223
Call(Box<Call>),
2324
PolyCall(Box<PolyCall>),
2425
DeclareAssign(Box<DeclareAssign>),

Diff for: src/ast/expr/kind.rs

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub enum ExprKind {
1616
String(String),
1717
NullTerminatedString(CString),
1818
CharLiteral(u8),
19+
Null,
1920
Call(Box<Call>),
2021
DeclareAssign(Box<DeclareAssign>),
2122
BasicBinaryOperation(Box<BasicBinaryOperation>),

Diff for: src/lexer/identifier_state.rs

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ impl IdentifierState {
4747
"impl" => TokenKind::ImplKeyword,
4848
"for" => TokenKind::ForKeyword,
4949
"is" => TokenKind::IsKeyword,
50+
"null" => TokenKind::NullKeyword,
5051
_ => TokenKind::Identifier(identifier),
5152
}
5253
.at(self.start_source)

Diff for: src/lower/expr/mod.rs

+3
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ pub fn lower_expr(
133133
"String literals are not fully implemented yet, still need ability to lower"
134134
)
135135
}
136+
ExprKind::Null => Ok(ir::Value::Literal(Literal::Zeroed(ir::Type::Ptr(
137+
Box::new(ir::Type::Void),
138+
)))),
136139
ExprKind::Call(call) => lower_expr_call(builder, ir_module, expr, function, asg, call),
137140
ExprKind::Variable(variable) => {
138141
let pointer_to_variable = lower_variable_to_value(variable.key);

Diff for: src/parser/parse_expr/primary/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ impl<'a, I: Inflow<Token>> Parser<'a, I> {
3535
self.input.advance().kind.unwrap_false_keyword();
3636
Ok(Expr::new(ExprKind::Boolean(false), source))
3737
}
38+
TokenKind::NullKeyword => {
39+
self.input.advance().kind.unwrap_null_keyword();
40+
Ok(Expr::new(ExprKind::Null, source))
41+
}
3842
TokenKind::Integer(..) => Ok(Expr::new(
3943
ExprKind::Integer(Integer::Generic(self.input.advance().kind.unwrap_integer())),
4044
source,

Diff for: src/resolve/expr/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,10 @@ pub fn resolve_expr(
230230
))
231231
*/
232232
}
233+
ast::ExprKind::Null => Ok(TypedExpr::new(
234+
asg::TypeKind::Ptr(Box::new(asg::TypeKind::Void.at(source))).at(source),
235+
asg::Expr::new(asg::ExprKind::Null, source),
236+
)),
233237
ast::ExprKind::Call(call) => resolve_call_expr(ctx, call, source),
234238
ast::ExprKind::DeclareAssign(declare_assign) => {
235239
resolve_declare_assign_expr(ctx, declare_assign, source)

Diff for: src/token.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ pub enum TokenKind {
8484
PubKeyword,
8585
TraitKeyword,
8686
ImplKeyword,
87-
IsKeyword,
8887
ForKeyword,
89-
GivenKeyword,
88+
IsKeyword,
89+
NullKeyword,
9090
Member,
9191
Add,
9292
Subtract,
@@ -182,7 +182,7 @@ impl Display for TokenKind {
182182
TokenKind::ImplKeyword => f.write_str("'impl' keyword"),
183183
TokenKind::ForKeyword => f.write_str("'for' keyword"),
184184
TokenKind::IsKeyword => f.write_str("'is' keyword"),
185-
TokenKind::GivenKeyword => f.write_str("'given' keyword"),
185+
TokenKind::NullKeyword => f.write_str("'null' keyword"),
186186
TokenKind::Member => f.write_str("'.'"),
187187
TokenKind::Add => f.write_str("'+'"),
188188
TokenKind::Subtract => f.write_str("'-'"),
@@ -316,7 +316,7 @@ impl TokenKind {
316316
| TokenKind::ImplKeyword
317317
| TokenKind::ForKeyword
318318
| TokenKind::IsKeyword
319-
| TokenKind::GivenKeyword
319+
| TokenKind::NullKeyword
320320
| TokenKind::OpenAngle
321321
| TokenKind::Comma
322322
| TokenKind::Colon

Diff for: tests/success/null/main.adept

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
pragma => adept("3.0")
3+
4+
#[foreign]
5+
func printf(format ptr-char, ...) int
6+
7+
func main {
8+
message ptr<char> = null
9+
printf(c"message\t= %010p\n", message)
10+
printf(c"null\t= %010p\n", null)
11+
}
12+

0 commit comments

Comments
 (0)