shithub: rgbds

Download patch

ref: 10e3f1a02b01b7a4c5b94d121f80284fb321c723
parent: 2a9d52871b0bc17f4056cdba71729085a1db8866
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Wed Dec 30 04:28:59 EST 2020

Deprecate built-in `_PI`

Fixes #670

--- a/include/asm/mymath.h
+++ b/include/asm/mymath.h
@@ -11,7 +11,7 @@
 
 #include <stdint.h>
 
-void math_DefinePI(void);
+int32_t math_Callback_PI(void);
 void math_Print(int32_t i);
 int32_t math_Sin(int32_t i);
 int32_t math_Cos(int32_t i);
--- a/src/asm/math.c
+++ b/src/asm/math.c
@@ -17,6 +17,7 @@
 
 #include "asm/mymath.h"
 #include "asm/symbol.h"
+#include "asm/warning.h"
 
 #define fx2double(i)	((double)((i) / 65536.0))
 #define double2fx(d)	((int32_t)((d) * 65536.0))
@@ -26,11 +27,13 @@
 #endif
 
 /*
- * Define the _PI symbol
+ * Return the _PI symbol value
  */
-void math_DefinePI(void)
+int32_t math_Callback_PI(void)
 {
-	sym_AddEqu("_PI", double2fx(M_PI));
+	warning(WARNING_OBSOLETE, "`_PI` is deprecated; use 3.14159\n");
+
+	return double2fx(M_PI);
 }
 
 /*
--- a/src/asm/symbol.c
+++ b/src/asm/symbol.c
@@ -720,5 +720,12 @@
 	labelScope = NULL;
 	anonLabelID = 0;
 
-	math_DefinePI();
+	/* _PI is deprecated */
+	struct Symbol *_PISymbol = createBuiltinSymbol("_PI");
+
+	_PISymbol->type = SYM_EQU;
+	_PISymbol->src = NULL;
+	_PISymbol->fileLine = 0;
+	_PISymbol->hasCallback = true;
+	_PISymbol->numCallback = math_Callback_PI;
 }
--- /dev/null
+++ b/test/asm/deprecated-pi.asm
@@ -1,0 +1,4 @@
+; Remove this test case when _PI is removed.
+	PRINTF _PI
+	PRINTT "\n"
+	PURGE _PI
--- /dev/null
+++ b/test/asm/deprecated-pi.err
@@ -1,0 +1,5 @@
+warning: deprecated-pi.asm(2): [-Wobsolete]
+    `_PI` is deprecated; use 3.14159
+ERROR: deprecated-pi.asm(4):
+    Built-in symbol '_PI' cannot be purged
+error: Assembly aborted (1 errors)!
--- /dev/null
+++ b/test/asm/deprecated-pi.out
@@ -1,0 +1,1 @@
+3.14159
--- a/test/asm/strfmt.asm
+++ b/test/asm/strfmt.asm
@@ -13,7 +13,7 @@
 PRINTT STRFMT(TEMPLATE, "violets", "blue")
 PRINTT STRFMT(TEMPLATE, "void", 0, "extra")
 
-PRINTT STRCAT(STRFMT(STRFMT("%%%s.%d%s", "", 9, "f"), _PI), \
+PRINTT STRCAT(STRFMT(STRFMT("%%%s.%d%s", "", 9, "f"), 3.14159), \
 	STRFMT(" ~ %s\n", STRFMT("%s%x", "thr", 238)))
 
 PRINTT STRFMT("%d eol %", 1)
--- a/test/asm/string-formatting.asm
+++ b/test/asm/string-formatting.asm
@@ -1,11 +1,12 @@
 n equ 300
 m equ -42
 f equ -123.0456
+pi equ 3.14159
 s equs "hello"
 
 	printt "<{ -6d:n}> <{+06u:n}> <{5x:n}> <{#16b:n}>\n"
 	printt "<{u:m}> <{+3d:m}> <{#016o:m}>\n"
-	printt "<{f:_PI}> <{06f:f}> <{.10f:f}>\n"
+	printt "<{f:pi}> <{06f:f}> <{.10f:f}>\n"
 	printt "<{#-10s:s}> <{10s:s}>\n"
 
 foo: macro
--- a/test/asm/string-formatting.err
+++ b/test/asm/string-formatting.err
@@ -1,3 +1,3 @@
-ERROR: string-formatting.asm(9):
+ERROR: string-formatting.asm(10):
     Formatting string with prefix flag '#'
 error: Assembly aborted (1 errors)!