remove str
All checks were successful
Check / Explore-Gitea-Actions (push) Successful in 13s

This commit is contained in:
sfja 2026-04-13 12:33:43 +02:00
parent c33c7f45a0
commit 696bfc55f4
5 changed files with 9 additions and 33 deletions

View File

@ -205,7 +205,9 @@ class ExprChecker {
case "IntExpr":
return this.checkIntExpr(node.as(tag));
case "StrExpr":
return Ty.create("Ptr", { ty: Ty.Str });
return Ty.create("Ptr", {
ty: Ty.create("Slice", { ty: Ty.U8 }),
});
case "ArrayExpr":
return this.checkArrayExpr(node.as(tag));
case "IndexExpr":
@ -300,12 +302,6 @@ class ExprChecker {
) {
return Ty.create("Slice", { ty: exprTy.kind.ty });
}
if (
exprTy.is("Str") &&
argTy.compatibleWith(Ty.I32)
) {
return Ty.I32;
}
this.cx.error(
node.loc,
`cannot use index operator on '${exprTy.pretty()}' with '${argTy.pretty()}'`,
@ -386,8 +382,7 @@ class ExprChecker {
!(argTy.is("Array") ||
argTy.is("Ptr") &&
(argTy.kind.ty.is("Array") ||
argTy.kind.ty.is("Slice") ||
argTy.kind.ty.is("Str")))
argTy.kind.ty.is("Slice")))
) {
this.reportArgTypeNotCompatible(
node,
@ -530,8 +525,6 @@ class TyChecker {
return Ty.Void;
case "bool":
return Ty.Bool;
case "str":
return Ty.Str;
case "i8":
return Ty.I8;
case "i16":

View File

@ -248,17 +248,6 @@ class FnLowerer {
);
}
}
if (valueTy.is("Str")) {
const valueInst = this.lowerPlace(place.kind.value);
if (argTy.is("Int")) {
const argInst = this.lowerExpr(arg);
return this.pushInst(
Ty.create("Ptr", { ty: Ty.I32 }),
"GetElemPtr",
{ base: valueInst, offset: argInst },
);
}
}
throw new Error(
`${place.kind.tag} with arg ${argTy.pretty()} not handled`,
);

View File

@ -199,12 +199,13 @@ export type InstKind =
| { tag: "Jump"; target: BasicBlock }
| { tag: "Branch"; cond: Inst; truthy: BasicBlock; falsy: BasicBlock }
| { tag: "Return"; source: Inst }
| { tag: "Not"; source: Inst }
| { tag: "Negate"; source: Inst }
| { tag: UnaryOp; source: Inst }
| { tag: BinaryOp; left: Inst; right: Inst }
| { tag: "Len"; source: Inst }
| { tag: "DebugPrint"; args: Inst[] };
export type UnaryOp = "Not" | "Negate";
export type BinaryOp =
| "Eq"
| "Ne"

View File

@ -35,7 +35,6 @@ export class Ty {
static U64 = Ty.create("Int", { intTy: "u64" });
static USize = Ty.create("Int", { intTy: "usize" });
static Bool = Ty.create("Bool", {});
static Str = Ty.create("Str", {});
private internHash(): string {
return JSON.stringify(this.kind);
@ -75,9 +74,6 @@ export class Ty {
if (this.is("Bool")) {
return other.is("Bool");
}
if (this.is("Str")) {
return other.is("Str");
}
if (this.is("Ptr")) {
if (!other.is("Ptr")) {
return false;
@ -142,7 +138,7 @@ export class Ty {
}
isSized(): boolean {
if (this.is("Slice") || this.is("Str")) {
if (this.is("Slice")) {
return false;
}
return true;
@ -160,8 +156,6 @@ export class Ty {
return `${this.kind.intTy}`;
case "Bool":
return "bool";
case "Str":
return "str";
case "Ptr":
return `*${this.kind.ty.pretty()}`;
case "PtrMut":
@ -199,7 +193,6 @@ export type TyKind =
| { tag: "IntLiteral" }
| { tag: "Int"; intTy: ast.IntTy }
| { tag: "Bool" }
| { tag: "Str" }
| { tag: "Ptr"; ty: Ty }
| { tag: "PtrMut"; ty: Ty }
| { tag: "Array"; ty: Ty; length: number }

View File

@ -1,7 +1,7 @@
fn main()
{
let my_string: *str = "hello world";
let my_string: *[u8] = "hello world";
// expect: hello world
print(my_string);
// expect: 104